function getSum(numArray: string[] | number[] = []): number {
    let sum = 0;
    numArray.forEach(num => {
        sum += parseInt(num);
    });
    return sum;
}

export function barChartTemplate(title: string, seriesData: string[] | number[], xAxisData: string[]) {
    const sum = getSum(seriesData);
    if (sum === 0) {
        return null;
    }
    return {
        title: {
            text: title,
            left: 'center',
            textStyle: {
                fontSize: 14,
                color: '#808492',
                fontWeight: 500,
            }
        },
        color: ['#3b9ffc'],
        tooltip: {
            trigger: 'axis',
            axisPointer: {
                type: 'shadow'
            },
            formatter: function (params) {
                return params[0].value + `次(${((params[0].value / sum) * 100).toFixed(2)}%)`;
            }
        },
        grid: {
            left: '30',
            right: '30',
            bottom: '20',
            containLabel: true
        },
        toolbox: {
            show: true,
            orient: 'vertical',
            left: 'right',
            top: 'center',
        },
        calculable: true,
        xAxis: {
            // boundaryGap: false, //x轴从0开始到结束显示
            // onZero: true,
            splitLine: {
                show: false
            }, //去除网格线
            splitArea: {
                show: false
            }, //保留网格区域
            axisLine: {
                show: true,
                lineStyle: { //轴上的线样式
                    color: '#808492',
                    width: 0.6, //这里是为了突出显示加上的
                },
            },
            axisTick: {
                show: true
            },
            axisLabel: { //轴上的数据样式
                color: '#808492',
            },
            data: xAxisData,
        },
        yAxis: {
            type: 'value',
            splitLine: {
                lineStyle: {
                    type: 'dashed',
                    color: '#ddd'
                }
            },
            axisLine: {
                show: false,
                lineStyle: {
                    color: "#999"
                },
            },
            nameTextStyle: {
                color: "#999"
            },
            splitArea: {
                show: false
            }
        },
        series: [
            {
                type: 'bar',
                barWidth: 20, // 柱形的宽度
                barGap: 0,
                data: seriesData,
                itemStyle: {
                    normal: {
                        barBorderRadius: [2, 2, 0, 0],
                    }
                },
            }
        ]
    };
}

export function pieChartTemplate(title: string, data: object[]) {
    if (!data || Object.keys(data).length === 0) {
        return null;
    }
    return {
        title:
        {
            text: title,
            left: "center",
            textStyle:
                { fontSize: 14, color: "#808492", fontWeight: 500 }
        },
        tooltip: {
            trigger: 'item',
            formatter: "{b} : {c} ({d}%)"
        },
        series: [
            {
                name: "ISP",
                type: "pie",
                radius: ["25%", "51%"],
                center: ["50%", "50%"],
                minAngle: 10,
                data: data,
                animationType: "scale",
                animationEasing: "elasticOut"
            }
        ]
    }

}

// 大小映射函数: 0~maxCount => 4~45
const MAXPX = 45;
const MINPX = 4;
function pxTrans(value: number, maxCount: number) {
    const px: number = (value / maxCount) * MAXPX;
    return px < MINPX ? MINPX : px;
}

export function geoChartTemplate(title: string, data: object[], maxCount: number, color = ['#C1E1FF', '#1890FF']) {
    if (!data || !maxCount) {
        return null;
    }

    return {
        title: {
            text: title,
            left: 'center',
            textStyle: {
                fontSize: 14,
                color: '#808492',
                fontWeight: 500,
            }
        },
        tooltip: {
            trigger: 'item',
            formatter: function (params) {
                return params.name + ' : ' + params.value[2];
            }
        },
        legend: {
            orient: 'vertical',
            y: 'bottom',
            x: 'right',
            data: ['value'],
            textStyle: {
                color: '#101010'
            }
        },
        visualMap: {
            min: 0,
            max: maxCount,
            calculable: true,
            inRange: {
                color: color
            },
            textStyle: {
                color: '#101010'
            }
        },
        geo: {
            map: 'china',
            label: {
                emphasis: {
                    show: false
                }
            },
            roam: true,
            scaleLimit: {
                min: 1,
                max: 10
            },
            itemStyle: {
                normal: {
                    areaColor: '#e2e2e2',
                    borderColor: '#e1e1e1'
                },
                emphasis: {
                    areaColor: '#eee'
                }
            }
        },
        series: [
            {
                name: '访问量',
                type: 'scatter',
                coordinateSystem: 'geo',
                data: data,
                symbolSize: function (val) {
                    return pxTrans(val[2], maxCount);
                },
                label: {
                    normal: {
                        show: false
                    },
                    emphasis: {
                        show: false
                    }
                },
                itemStyle: {
                    normal: {
                        color: color[1]
                    }
                }
            }
        ]
    };
}

export const geoCoordMap = { '北京市': [115.97, 40.45], '天津市': [117.4, 40.05], '石家庄市': [114.3, 38.08], '唐山市': [118.7, 40.02], '秦皇岛市': [118.87, 39.88], '邯郸市': [114.2, 36.7], '邢台市': [114.5, 36.85], '保定市': [115.85, 39.33], '张家口市': [115.27, 40.97], '承德市': [117.75, 41.93], '沧州市': [116.08, 38.43], '廊坊市': [117.07, 39.98], '衡水市': [115.55, 38.02], '太原市': [112.17, 37.92], '大同市': [113.6, 40.03], '阳泉市': [113.4, 38.08], '长治市': [113.22, 36.33], '晋城市': [112.92, 35.8], '朔州市': [113.08, 39.83], '晋中市': [111.92, 37.03], '运城市': [110.7, 35.6], '忻州市': [112.7, 38.73], '临汾市': [111.72, 36.57], '吕梁市': [111.78, 37.27], '呼和浩特市': [111.45, 41.08], '包头市': [110.43, 41.7], '乌海市': [106.7, 39.5], '赤峰市': [119.9, 42.28], '通辽市': [119.65, 45.53], '鄂尔多斯市': [109.73, 39.57], '呼伦贝尔市': [121.52, 50.78], '巴彦淖尔市': [107.15, 40.88], '乌兰察布市': [113.15, 40.43], '兴安盟': [121.57, 45.38], '锡林郭勒盟': [116.47, 42.18], '阿拉善盟': [101.07, 41.97], '沈阳市': [122.82, 42.0], '大连市': [122.98, 39.7], '鞍山市': [122.7, 40.88], '抚顺市': [124.92, 42.1], '本溪市': [125.35, 41.27], '丹东市': [124.07, 40.45], '锦州市': [121.35, 41.17], '营口市': [122.5, 40.65], '阜新市': [122.53, 42.38], '辽阳市': [123.33, 41.42], '盘锦市': [122.02, 41.25], '铁岭市': [124.03, 42.55], '朝阳市': [119.4, 41.25], '葫芦岛市': [120.72, 40.62], '长春市': [125.7, 44.53], '吉林市': [126.05, 42.95], '四平市': [123.5, 43.52], '辽源市': [125.0, 42.92], '通化市': [126.18, 41.12], '白山市': [126.9, 41.8], '松原市': [126.02, 44.98], '白城市': [124.28, 45.5], '延边朝鲜族自治州': [128.9, 43.12], '哈尔滨市': [127.15, 44.92], '齐齐哈尔市': [124.87, 48.48], '鸡西市': [131.87, 45.55], '鹤岗市': [131.85, 47.28], '双鸭山市': [134.02, 46.8], '大庆市': [124.45, 46.87], '伊春市': [128.02, 46.98], '佳木斯市': [132.03, 47.25], '七台河市': [130.57, 45.75], '牡丹江市': [130.52, 44.92], '黑河市': [126.2, 48.52], '绥化市': [126.97, 47.47], '大兴安岭地区': [122.53, 52.97], '上海市': [121.4, 31.62], '南京市': [118.88, 31.33], '无锡市': [119.82, 31.35], '徐州市': [117.95, 34.32], '常州市': [119.57, 31.75], '苏州市': [121.1, 31.45], '南通市': [121.17, 31.9], '连云港市': [119.35, 34.08], '淮安市': [119.02, 33.02], '盐城市': [120.47, 33.2], '扬州市': [119.55, 32.43], '镇江市': [119.17, 31.95], '泰州市': [120.15, 32.52], '宿迁市': [118.22, 33.47], '杭州市': [119.72, 30.23], '宁波市': [121.4, 29.65], '温州市': [120.95, 28.13], '嘉兴市': [120.57, 30.63], '湖州市': [119.68, 30.63], '绍兴市': [120.82, 29.58], '金华市': [120.03, 28.9], '衢州市': [118.62, 28.75], '舟山市': [122.45, 30.73], '台州市': [121.12, 28.85], '丽水市': [119.13, 28.08], '合肥市': [117.17, 31.72], '芜湖市': [118.33, 30.92], '蚌埠市': [117.32, 33.32], '淮南市': [116.72, 32.7], '马鞍山市': [118.48, 31.55], '淮北市': [116.77, 33.92], '铜陵市': [117.78, 30.95], '安庆市': [116.95, 31.05], '黄山市': [117.72, 29.87], '滁州市': [117.98, 32.78], '阜阳市': [116.27, 32.63], '宿州市': [117.88, 33.48], '巢湖市': [118.37, 31.72], '六安市': [116.33, 31.4], '亳州市': [116.2, 33.15], '池州市': [117.85, 30.65], '宣城市': [118.98, 30.63], '福州市': [119.52, 25.97], '厦门市': [118.23, 24.62], '莆田市': [118.68, 25.37], '三明市': [117.37, 25.98], '泉州市': [118.38, 24.97], '漳州市': [117.82, 24.45], '南平市': [118.12, 27.33], '龙岩市': [117.42, 25.3], '宁德市': [120.22, 27.33], '南昌市': [116.27, 28.37], '景德镇市': [117.12, 28.97], '萍乡市': [114.03, 27.63], '九江市': [115.67, 29.68], '新余市': [114.67, 27.82], '鹰潭市': [117.22, 28.28], '赣州市': [114.75, 25.65], '吉安市': [114.27, 26.72], '宜春市': [115.37, 28.42], '抚州市': [116.32, 26.83], '上饶市': [117.57, 28.95], '济南市': [117.53, 36.72], '青岛市': [120.5, 36.87], '淄博市': [118.17, 36.18], '枣庄市': [117.15, 35.08], '东营市': [118.4, 37.07], '烟台市': [121.15, 36.78], '潍坊市': [119.4, 36.87], '济宁市': [116.97, 35.4], '泰安市': [116.77, 36.18], '威海市': [121.53, 36.92], '日照市': [118.83, 35.58], '莱芜市': [117.8, 36.07], '临沂市': [118.65, 34.92], '德州市': [116.63, 36.93], '聊城市': [115.7, 36.85], '滨州市': [117.73, 36.88], '牡丹区': [115.08, 35.28], '郑州市': [113.03, 34.47], '开封市': [114.82, 34.82], '洛阳市': [112.78, 34.73], '平顶山市': [112.83, 34.17], '安阳市': [113.82, 36.07], '鹤壁市': [114.2, 35.6], '新乡市': [113.8, 35.47], '焦作市': [112.78, 34.9], '濮阳市': [115.02, 35.7], '许昌市': [113.77, 34.22], '漯河市': [113.93, 33.82], '三门峡市': [110.87, 34.52], '南阳市': [112.08, 32.68], '商丘市': [116.43, 33.92], '信阳市': [114.73, 32.35], '周口市': [114.9, 33.45], '驻马店市': [114.98, 32.75], '武汉市': [114.8, 30.85], '黄石市': [114.97, 30.1], '十堰市': [111.52, 32.55], '宜昌市': [111.77, 30.43], '襄樊市': [112.25, 31.72], '鄂州市': [114.88, 30.4], '荆门市': [112.58, 31.17], '孝感市': [113.83, 30.65], '荆州市': [111.77, 30.18], '黄冈市': [115.55, 29.85], '咸宁市': [113.88, 29.72], '随州市': [113.82, 31.62], '恩施土家族苗族自治州': [110.03, 29.9], '仙桃市': [110.67, 31.75], '长沙市': [113.63, 28.15], '株洲市': [113.48, 27.67], '湘潭市': [112.52, 27.93], '衡阳市': [112.38, 26.42], '邵阳市': [110.63, 26.73], '岳阳市': [113.47, 29.48], '常德市': [111.88, 29.62], '张家界市': [110.15, 29.4], '益阳市': [112.38, 28.85], '郴州市': [113.23, 25.98], '永州市': [111.58, 25.18], '怀化市': [109.82, 27.2], '娄底市': [111.67, 27.7], '湘西土家族苗族自治州': [109.43, 29.47], '广州市': [113.58, 23.55], '韶关市': [114.3, 25.12], '深圳市': [114.22, 22.55], '珠海市': [113.4, 22.07], '汕头市': [117.02, 23.42], '佛山市': [112.88, 22.9], '江门市': [112.3, 22.18], '湛江市': [110.77, 21.43], '茂名市': [110.95, 22.35], '肇庆市': [112.68, 23.33], '惠州市': [114.25, 23.73], '梅州市': [115.73, 24.15], '汕尾市': [115.65, 22.95], '河源市': [114.77, 23.82], '阳江市': [111.78, 22.18], '清远市': [112.38, 24.78], '东莞市': [113.75, 23.05], '中山市': [113.38, 22.52], '潮州市': [117.0, 23.67], '揭阳市': [116.18, 23.3], '云浮市': [111.57, 22.77], '南宁市': [109.27, 22.68], '柳州市': [109.6, 25.78], '桂林市': [110.83, 24.83], '梧州市': [110.98, 22.92], '北海市': [109.2, 21.67], '防城港市': [107.97, 21.53], '钦州市': [109.55, 22.27], '贵港市': [110.08, 23.4], '玉林市': [110.35, 22.72], '百色市': [105.33, 24.77], '贺州市': [111.27, 24.83], '河池市': [108.67, 24.5], '来宾市': [108.87, 23.82], '崇左市': [106.75, 22.12], '海口市': [110.37, 20.03], '三亚市': [109.5, 18.25], '五指山市': [109.83, 19.03], '重庆市': [108.17, 29.3], '成都市': [103.67, 30.63], '自贡市': [104.98, 29.18], '攀枝花市': [101.85, 26.7], '泸州市': [105.82, 28.05], '德阳市': [104.2, 31.35], '绵阳市': [104.75, 31.78], '广元市': [105.93, 31.73], '遂宁市': [105.25, 30.58], '内江市': [105.28, 29.35], '乐山市': [103.48, 29.6], '南充市': [106.0, 31.55], '眉山市': [103.85, 29.83], '宜宾市': [104.33, 28.83], '广安市': [106.77, 30.38], '达州市': [108.03, 32.07], '雅安市': [102.82, 30.37], '巴中市': [107.1, 31.57], '资阳市': [104.55, 30.4], '阿坝藏族羌族自治州': [102.55, 32.8], '甘孜藏族自治州': [99.28, 28.72], '凉山彝族自治州': [103.57, 28.27], '贵阳市': [106.47, 26.55], '六盘水市': [104.47, 25.72], '遵义市': [106.42, 27.82], '安顺市': [106.08, 25.75], '铜仁地区': [109.2, 27.52], '兴义市': [105.47, 25.12], '毕节地区': [104.72, 27.13], '黔东南苗族侗族自治州': [107.8, 26.2], '黔南布依族苗族自治州': [107.87, 25.98], '昆明市': [102.48, 24.92], '曲靖市': [104.1, 26.22], '玉溪市': [101.98, 24.07], '保山市': [99.6, 24.83], '昭通市': [104.4, 28.63], '丽江市': [100.85, 27.28], '墨江哈尼族自治县': [99.62, 22.63], '临沧市': [99.25, 23.15], '楚雄彝族自治州': [102.08, 25.15], '红河哈尼族彝族自治州': [103.97, 22.52], '文山壮族苗族自治州': [105.62, 23.63], '西双版纳傣族自治州': [101.57, 21.48], '大理白族自治州': [100.18, 26.57], '德宏傣族景颇族自治州': [97.8, 24.2], '怒江傈僳族自治州': [99.42, 26.45], '迪庆藏族自治州': [99.28, 27.18], '拉萨市': [91.73, 29.83], '昌都地区': [94.7, 30.93], '山南地区': [90.4, 28.97], '日喀则地区': [88.52, 28.28], '那曲地区': [87.23, 31.78], '阿里地区': [85.17, 31.02], '林芝地区': [93.07, 29.05], '西安市': [109.08, 34.53], '铜川市': [109.12, 35.4], '宝鸡市': [107.32, 34.07], '咸阳市': [108.48, 34.3], '渭南市': [110.08, 34.57], '延安市': [109.25, 35.58], '汉中市': [107.98, 33.53], '榆林市': [110.03, 37.62], '安康市': [110.1, 32.82], '商洛市': [109.1, 33.68], '兰州市': [104.12, 35.85], '嘉峪关市': [98.27, 39.8], '金昌市': [101.97, 38.25], '白银市': [104.07, 37.15], '天水市': [106.22, 35.0], '武威市': [103.13, 36.98], '张掖市': [101.08, 38.78], '平凉市': [105.72, 35.52], '酒泉市': [94.67, 40.13], '庆阳市': [107.2, 35.68], '定西市': [104.03, 34.43], '陇南市': [106.3, 33.92], '临夏回族自治州': [103.4, 35.67], '甘南藏族自治州': [102.52, 35.2], '西宁市': [101.27, 36.68], '海东地区': [102.48, 35.85], '海北藏族自治州': [100.13, 37.33], '黄南藏族自治州': [101.6, 34.73], '海南藏族自治州': [100.75, 35.58], '果洛藏族自治州': [98.18, 34.92], '玉树藏族自治州': [95.8, 34.13], '海西蒙古族藏族自治州': [99.02, 37.3], '银川市': [106.33, 38.1], '石嘴山市': [106.53, 38.9], '吴忠市': [106.07, 38.02], '固原市': [106.63, 35.85], '中卫市': [105.65, 36.57], '乌鲁木齐市': [87.6, 43.8], '克拉玛依市': [85.68, 46.08], '吐鲁番地区': [88.65, 42.78], '哈密地区': [94.7, 43.25], '昌吉回族自治州': [90.28, 43.83], '博尔塔拉蒙古自治州': [81.03, 44.97], '巴音郭楞蒙古自治州': [86.63, 41.98], '阿克苏地区': [79.05, 40.5], '阿图什市': [75.25, 39.72], '喀什地区': [78.55, 39.78], '和田地区': [82.68, 37.07], '伊犁哈萨克自治州': [82.5, 43.78], '塔城地区': [85.72, 46.8], '阿勒泰地区': [85.88, 47.43], '石河子市': [87.53, 44.17], '港澳台': [119.58, 23.58] };